# 把一个装有多个文件的文件夹的文件平均分配到多个子文件夹
# 只包含该文件夹下的文件，不包括其子文件夹的文件
import os
import time
import shutil


def get_files(path):
    # 获取传入路径dir_path下的一级文件

    files_list = []

    for root, dirs, files in os.walk(path):
        for file in files:
            file_path = os.path.join(path, file)
            files_list.append(file_path)
        break

    return files_list


def create_n_folders(path, n):
    # 在给定路劲dir下创建n个文件夹

    folders_list = []
    t = int(time.time())

    for i in range(n):
        new_folder_path = path + os.sep + str(t + i)
        os.makedirs(new_folder_path, exist_ok=True)
        folders_list.append(new_folder_path)

    return folders_list


def move_files(files_list, folders_list, denominator):
    # 把files_list里的文件分成给定份数denominator，依次放入folders_list里的各个文件夹

    # 除最后一份外，每份的文件数
    if len(files_list) % denominator != 0:
        max_num = len(files_list) // denominator + 1
    else:
        max_num = len(files_list) // denominator

    for i in range(denominator):
        # 不是最后一份
        if i != denominator - 1:
            temp_list = files_list[i * max_num:max_num * (i + 1)]
            for f in temp_list:
                shutil.move(f, folders_list[i])
        # 最后一份
        else:
            temp_list = files_list[i * max_num:]
            for f in temp_list:
                shutil.move(f, folders_list[i])


if __name__ == '__main__':
    # 用户只需要修改dir_path,denominator

    # 需要处理的文件夹
    dir_path = r'C:\Users\jimka\Downloads\123'
    # 你想分成多少份？
    denominator = 3
    # 获取目标文件夹下一级文件
    files_list = get_files(dir_path)
    # 创建多个文件夹
    folders_list = create_n_folders(dir_path, denominator)
    # 把文件移到文件夹
    move_files(files_list, folders_list, denominator)
    # 结束
    print("程序结束，请查看结果")
